def num_type_judge():
    # dict_list_1有三个元素，每个元素都是一个字典
    # 通过索引来获取值，比如，dict_list_1[0]，得到的是第一个字典的地址
    dict_list_1 = [
        {"name": "张三", "age": 18, "hobby": ["打球", "看电影"]},
        {"name": "李四", "age": 20, "hobby": ["打球", "看电影"]},
        {"name": "王五", "age": 22, "hobby": ["打球", "看电影"]},
    ]
    # 修改值
    # 复制字典列表
    dict_list_2 = dict_list_1.copy()  # 创建新对象，dict_list_2指向新地址
    # 是通过浅复制，所以dict_list_2里三个元素保存字典地址与dict_list_1里三个元素保存字典地址是一样
    dict_list_3 = dict_list_1  # dict_list_3和dict_list_1指向同一个地址
    # 取出第一个进来修改
    first = dict_list_1[0]
    first["age"] = 19
    first["hobby"].append("写代码")
    print("dict_list_1:", dict_list_1)  # 值被修改
    print("dict_list_3:", dict_list_3)  # 值被修改
    print("dict_list_2:", dict_list_2)  # 值被修改（因为都指向的为同一个元素地址，因此会被一起修改）
    # print(dict_list_1, dict_list_3)  # 打印是否是一样
    # print(dict_list_1, dict_list_2)  # 打印是否是一样
    # 可以通过id函数来查看内存地址
    print(id(dict_list_1), id(dict_list_3), id(dict_list_2))  # 1和3地址一致，2为新地址
    print(id(first), id(dict_list_1[0]), id(dict_list_3[0]), id(dict_list_2[0]))  # 指向了同一个元素地址

    # 好好理解下面的情况
    xingqu = ["打球", "看电影"]
    # 三条数据中的hobby指向的是同一个地址
    dict_list_4 = [
        {"name": "张三", "age": 18, "hobby": xingqu},
        {"name": "李四", "age": 20, "hobby": xingqu},
        {"name": "王五", "age": 22, "hobby": xingqu},
    ]
    # 取出第一条
    other = dict_list_4[0]
    print(id(other), id(dict_list_4[0]), id(dict_list_3[1]), id(dict_list_2[2]))    #other和[0]是一个地址，[1]、[2]都是新地址，但都指向了同一个元素地址（xingqu）
    # 通过哪一条数据来修改都是一样的
    other["hobby"].append("写代码")
    print("dict_list_4", dict_list_4)


if __name__ == '__main__':
    num_type_judge()
